<?php

require_once 'Basic.php';

class EditDriver extends BasicEntity {
  
  private $idCliente;
  private $condutor;
  private $name;
  
  public function __construct($idCliente) {
    $db = new DBUtils();
    $idCliente = intval($idCliente);
    
    $this->fields = null;
    try {
      $db->connect();
      
      $db->runQuery("select * from DadosCliente where idCliente = ?", array($idCliente));
      $item = $db->getItem();
      if($item === null) {
        $idCliente = null;
        $db->close();
        return;
      }
      $this->name = $item->nomeCliente;
      if($this->name === null) {
        $idCliente = null;
        return;
      }
      $this->idCliente = $idCliente;
      $this->condutor = $item->tipoPF === "condutor";
      $vencimentoCNH = $item->vencimentoCNH;
      if($vencimentoCNH !== null) {
        $vencimentoCNH = $vencimentoCNH->format("d/m/Y");
      }
      $this->fields = array(
        new FormField(false, "CNH", "CNH", new FormFieldAbsNumber(), $item->CNH),
        new FormField(false, "vencimentoCNH", "Data de Vencimento da CNH", new FormFieldDate(), $vencimentoCNH),
        new FormField(false, "categoriaCNH", "Categoria da CNH", new FormFieldCategoryCNH(), $item->categoriaCNH)
      );
      $this->processFields();
      $db->close();
    }
    catch(DBError $e) {
      $idClient = null;
      logMessage($e->errors, "Construct_EditDriver");
      $db->close(false);
      if($this->fields === null) {
        throw Exception(htmlentities('$this->fields é null.'));
      }
    }
  }
  
  protected function actionDescription() {
    return "Edit";
  }
  
  public function actionEdit() {
    foreach($this->fields as $k => $v) {
      $$k = $v->value();
    }
    
    if($vencimentoCNH !== null) {
      $vencimentoCNH = FormFieldDate::toDateTime($vencimentoCNH);
    }
    
    $db = new DBUtils();
    try {
      if($CNH !== null || $vencimentoCNH !== null || $categoriaCNH !== null) {
        if($CNH === null || $vencimentoCNH === null || $categoriaCNH === null) {
          $this->fields["CNH"]->setValid($CNH !== null);
          $this->fields["vencimentoCNH"]->setValid($vencimentoCNH !== null);
          $this->fields["categoriaCNH"]->setValid($categoriaCNH !== null);
          return htmlentities("Caso especificado algum dado sobre a CNH, deve-se especificar todos.");
        }
      
        $db->connect();
          
        $db->beginTransaction();
        if(!$this->condutor) {
          $db->runQuery("update PessoaFisica set tipo = 'condutor' where idCliente = ?", array($this->idCliente));
        }
        $db->runQuery("insert into condutor (CNH, vencimentoCNH, categoriaCNH, idCliente) values (?, ?, ?, ?)",
          array($CNH, $vencimentoCNH, $categoriaCNH, $this->idCliente));
        
        $db->close(true);
      }
      else {
        $db->connect();
        $db->beginTransaction();
        
        if($this->condutor) {
          $db->runQuery("delete from Condutor where idCliente = ?", array($this->idCliente));
          $db->runQuery("update PessoaFisica set tipo = null where idCLiente = ?", array($this->idCliente));
        }
        
        $db->close(true);
      }
    }
    catch(DBError $e) {
      $db->close(false);
      logMessage($e->errors, "EditDriver");
      return "Falha no banco de dados. O erro foi reportado.";
    }
    
    return true;
  }
  
  public function getDriverName() {
    return $this->idCliente === null ? '[???]' : $this->name;
  }
  
  public function valid() {
    return $this->idCliente !== null;
  }
  
}

correctStdFormGET();
mustBe(isset($_GET["idCliente"]) && (isLoggedAsClient($_GET["idCliente"]) || isLoggedAsEmployee()));
$idCliente = intval($_GET["idCliente"]);
$edit = new EditDriver($idCliente);
$page = new Page(htmlentities("Edição de dados de condução - " . $edit->getDriverName()));

if($edit->valid()) {
  $form = new StdForm($edit, $_GET, $_POST, "", "", "EditDriver.php?idCliente=${idCliente}");
  if($form->processForm() && $form->receiving()) {
    header("Location: ClientInfo.php?idCliente=${idCliente}");
  }
  $page->addContent($form->getHtml());
}
else {
  $page->addContent('<p class="errorMessage">' . htmlentities("O usuário fornecido não existe. Erro interno.") . "</p>");
}

echo $page->getHtml();

